#ifndef FILEOPERATOR_H
#define FILEOPERATOR_H

#include <QObject>
#include <QDir>
#include <QTextStream>
#include <QDataStream>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include <QDateTime>
#include <QUrlQuery>

class FileOperator : public QObject
{
    Q_OBJECT
public:
    explicit FileOperator(QObject *parent = nullptr);

    //读取文件
    QByteArray readFile(const QString path);
    QByteArray readFile(QFile &file);
    //写文件
    bool writeFile(const QString path,const QByteArray &data);
    bool writeFile(QFile &file,const QByteArray &data);
    //复制文件
    bool copyFile(const QString &sourcePath,const QString &targetPath);
    bool copyFile(QFile &sourceFile,QFile &targetFile);
    //创建文件
    bool createFile(const QString path);
    bool createFile(QFile &file);
    //递归删除目录
    bool deleteDirectoryRecursively(const QString directoryPath,bool isDelRoot=false);//删除一个目录的所有文件，false表示不删除当前目录，true表示删除当前目录。

    //将json解析为可用
    QVariantMap parseJsonObjectFile(QString path);//读json文件
    QVariantMap parseJsonObject(const QByteArray &jsonData);
    QVariantList parseJsonArrayFile(QString path);//读json文件
    QVariantList parseJsonArray(const QByteArray &jsonData);
    //将json进行封装
    QVariantMap recursiveReadJsonObject(const QJsonObject &jsonObject);//辅助函数
    QVariantList recursiveReadJsonArray(const QJsonArray &jsonArray);//辅助函数

    QJsonObject recursiveWriteJsonObject(const QVariantMap &map);//辅助函数
    QJsonArray recursiveWriteJsonArray(const QVariantList &list);//辅助函数
    QJsonValue recursiveWriteJsonValue(const QVariant &value);//辅助函数
    //将json写入到文件中
    bool writeJsonFile(const QVariantMap &map, QString path);
    bool writeJsonFile(const QVariantList &list,QString path);

    QString formatMessageTime(qint64 messageMilliseconds) ;
    QMap<QString, QString> getQueryParamsFromUrl(const QString &url,const QString &delimiter);
    QMap<QString, QString> getQueryParamsFromUrl(const QString &url);
    QMap<QString, QString> getQueryParamsFromUrl(const QUrl &url);
signals:

private:
    //QVariantMap保存一个对象的所有内容
    //QVariantList保存一个数组的内容
    bool createDir_if(const QString path);
    bool createDir_if(QFile &file);
};

#endif // FILEOPERATOR_H
